/*********************************************************************************
* Copyright (c) zhujinyang.
* All rights reserved.
*
* \file
*
* mal main
*
* 
*********************************************************************************/
#include "os_ext_api.h"
#include "cc_error.h"
#include "mal_printf.h"
#include "mal_update.h"
#include "mal_console.h"
#include "mal_nv_drv.h"
#include "g_cfg.h"






/*
********************************************************************************
* define config parameters
********************************************************************************
*/




/*
********************************************************************************
* define struct
********************************************************************************
*/




/*
********************************************************************************
* define module variants
********************************************************************************
*/

#if (EN_APP > 0)

#ifdef APP_TASK_INIT
#undef APP_TASK_INIT
#endif
#define APP_TASK_INIT(_TASK_INIT_)  void _TASK_INIT_(void);
#include "mal_task_def.table"


#ifdef APP_TASK_INIT
#undef APP_TASK_INIT
#endif
#define APP_TASK_INIT(_TASK_INIT_)  _TASK_INIT_,

static void (* const s_task_table[])(void) = {
    #include "mal_task_def.table"
    0
};

static void mal_main_app_init(void)
{
    INT32U i;

    for (i = 0; i < sizeof(s_task_table)/sizeof(s_task_table[0]); i++) {
        if (s_task_table[i]) {
            s_task_table[i]();
        }
    }
}
#endif

/**********************************************************************************
* \brief:       main task entry
* \param[in]:   pdata  : task private data
* \return:      none
**********************************************************************************/
static void mal_main(void *arg)
{
    mal_printf_init();
    mal_console_init();
    mal_update_init();
    
    #if (EN_APP > 0)
    //mal_can_send_init();
    //mal_can_recv_init();
    //mal_iic_drv_init();
    //mal_nv_initdrv();
    
    printf_com("appl start, %s, %s\r\n", __DATE__, __TIME__);

    mal_main_app_init();
    #else
    
    printf_com("boot start, %s, %s\r\n", __DATE__, __TIME__);
    
    #endif
    	
}





/**********************************************************************************
* \brief:       console init
* \param[in]:   none  
* \return:      none
**********************************************************************************/
void mal_main_init(void)
{
    void *tid;

    tid = os_thread_create(-1, mal_main, 0, (void *)1, 1, 0);
    CC_ASSERT(tid);
    
}





